package com.bird.jdk.内部类;

/**
 * @author sijunqiang
 * @data 2021/4/1 23:03
 * @description:
 * 如果外部类的非静态方法任意位置创建某个内部类的对象时，
 * 那么必须要指明这个对象的类型：OuterClassName.InnerClassName 这样格式的
 */
public class Parcel2 {

    // 定义一个内容内部类
    class Contents {

        // 内部类成员变量
        private int i = 11;

        //内部类成员方法
        private int value() {
            return i;
        }
    }

    // 定义一个目的的内部类
    class Destination {

        // 定义一个标签属性
        private String label;

        // 定义一个目的地 方法
        private Destination(String whereTo) {
            label = whereTo;
        }

        // 定义读取标签的方法
        String readLabel() {
            return label;
        }
    }

    // 创建一个方法 将指向内部类的引用
    public Destination to(String s) {
        return new Destination(s);
    }
    public Contents contents(){
       return new Contents();
    }

    // 外部方法
    public void ship(String dest) {

        //  create one  content inner class
        Contents contents = new Contents();
        // the to() method reference inner destination object.
        Destination to = to(dest);
        System.out.println("print inner class result" + to.readLabel());

        // 创建对象方法
        Destination destination = new Destination(dest);
        System.out.println(destination.readLabel());
    }

    //junit test
    public static void main(String[] args) {
        Parcel2 parcel = new Parcel2();
        parcel.ship("aim tasmania ");
        // defining references to inner classes
        Parcel2 q = new Parcel2();
        Parcel2.Contents content = q.contents();
        Parcel2.Destination borneo = q.to("borneo");
    }
}
